// MongoDB 进度升级脚本 - 为现有用户更新进度
// 此脚本用于将现有用户的进度按级别升级

db = db.getSiblingDB('gof23');

// 查找所有用户
const users = db.users.find().toArray();
if (users.length === 0) {
  print("警告: 没有找到任何用户");
  quit();
}

/**
 * 升级特定用户的进度
 * @param {ObjectId} userId - 用户ID
 * @param {string} level - 要完成的级别 ("初级", "中级", "高级" 或 "all" 表示全部)
 */
function upgradeUserProgress(userId, level) {
  // 获取所有模式数据
  const patterns = db.patterns.find().toArray();
  
  if (patterns.length === 0) {
    print("错误: 没有找到任何设计模式");
    return;
  }
  
  // 获取所有挑战
  const challenges = db.challenges.find().toArray();
  
  // 按模式键组织挑战
  const challengesByPattern = {};
  challenges.forEach(challenge => {
    if (!challengesByPattern[challenge.patternKey]) {
      challengesByPattern[challenge.patternKey] = [];
    }
    challengesByPattern[challenge.patternKey].push(challenge._id);
  });
  
  // 确定要更新的模式
  let patternsToUpdate = [];
  if (level === "all") {
    patternsToUpdate = patterns.map(p => p.key);
  } else {
    patternsToUpdate = patterns.filter(p => p.level === level).map(p => p.key);
  }
  
  if (patternsToUpdate.length === 0) {
    print(`没有找到级别为 ${level} 的模式`);
    return;
  }
  
  // 查找用户现有的进度记录
  const existingProgress = db.progress.find({ userId: userId }).toArray();
  const existingProgressMap = {};
  existingProgress.forEach(p => {
    existingProgressMap[p.patternKey] = p;
  });
  
  // 更新每个模式的进度
  let updatedCount = 0;
  let createdCount = 0;
  
  patternsToUpdate.forEach(patternKey => {
    const patternChallenges = challengesByPattern[patternKey] || [];
    
    if (existingProgressMap[patternKey]) {
      // 更新现有进度
      db.progress.updateOne(
        { userId: userId, patternKey: patternKey },
        { 
          $set: {
            completedChallenges: patternChallenges,
            currentScore: 60, // 满分
            isComplete: true,
            lastUpdated: new Date()
          }
        }
      );
      updatedCount++;
    } else {
      // 创建新的进度记录
      db.progress.insertOne({
        userId: userId,
        patternKey: patternKey,
        completedChallenges: patternChallenges,
        currentScore: 60, // 满分
        maxScore: 60,
        isComplete: true,
        lastUpdated: new Date()
      });
      createdCount++;
    }
  });
  
  print(`为用户 ${userId} 更新了 ${level} 级别的进度:`);
  print(`- 更新了 ${updatedCount} 个现有进度记录`);
  print(`- 创建了 ${createdCount} 个新进度记录`);
}

// 使用示例

// 1. 为第一个用户完成所有初级模式
const firstUser = users[0];
print(`\n为用户 ${firstUser.name} (${firstUser._id}) 设置初级模式进度...`);
upgradeUserProgress(firstUser._id, "初级");

// 如果有第二个用户，为其完成所有中级模式
if (users.length > 1) {
  const secondUser = users[1];
  print(`\n为用户 ${secondUser.name} (${secondUser._id}) 设置中级模式进度...`);
  upgradeUserProgress(secondUser._id, "中级");
}

// 示例: 完成特定用户的所有模式
// 取消下面的注释并修改用户ID来使用
// print("\n为特定用户设置所有模式进度...");
// upgradeUserProgress(ObjectId("5d7a514b5d2c12c7449be042"), "all");

print("\n进度升级完成!");

// 查询更新后的用户进度统计
users.forEach(user => {
  const completedProgress = db.progress.find({ userId: user._id, isComplete: true }).count();
  const totalPatterns = db.patterns.find().count();
  const completionRate = Math.round((completedProgress / totalPatterns) * 100);
  
  print(`用户 ${user.name} 的进度完成率: ${completionRate}% (${completedProgress}/${totalPatterns})`);
}); 